package com.lcx.core.exector;

import com.lcx.annotation.IOCValue;
import com.lcx.exbean.LogBean;
import com.lcx.util.JsonHandler;
import javafx.scene.web.WebEngine;

import java.util.List;

import static com.lcx.util.JsTemplateUtil.getExecJson;

/**
 * 在java中调用js代码
 */
@IOCValue
public class JsExector {

    private static final LogBean logger = LogBean.getLogger(JsExector.class);

    private WebEngine webEngine;

    public JsExector(WebEngine webEngine){
        this.webEngine = webEngine;
    }
    public JsExector(){
    }

    /**
     * 执行一个js方法。
     * @param param
     * @param jsMethodName
     * @param clazz
     * @param <T>
     * @return
     */
    public <T>T execJs(String jsMethodName,Class<T> clazz,Object... param){
        String result = (String) execJsCode(getExecJson(param,jsMethodName));
        T t = null;
        if(result!=null && clazz!=null){
            t = JsonHandler.parseJson(result,clazz);
        }
        return t;
    }

    /**
     * 执行一个js方法
     * @param param
     * @param jsMethodName
     * @param clazz
     * @param <T>
     * @return
     */
    public <T>List<T> execJsArray( String jsMethodName, Class<T> clazz,Object...param){
        String result = (String) execJsCode(getExecJson(param,jsMethodName));
        List<T> t = null;
        if(result!=null && clazz!=null){
            t = (List<T>) JsonHandler.parseArrayJson(result,clazz);
        }
        return t;
    }

    /**
     * 使用原生的方式直接调用js代码
     * @param jsCode
     * @return
     */
    public Object execJsCode(String jsCode){
        return webEngine.executeScript(jsCode);
    }

}
